/*
    Copyright (c) 2009 Jay Graham

    Distributed under the MIT License (see accompanying file LICENSE_1_0_0.txt
    or http://www.opensource.org/licenses/mit-license.php)
*/

/**************************************************************************************************/

#ifndef PROTOX_RPR_ATTRIBUTE_TABLE_HPP
#define PROTOX_RPR_ATTRIBUTE_TABLE_HPP

/**************************************************************************************************/

#include <protox/hla/attr.hpp>
#include <protox/hla/keywords.hpp>
#include <protox/hla/name.hpp>

#include <protox/hla_13/basic_data_representation_table.hpp>

#include "./entity_type_struct.hpp"
#include "./entity_identifier_struct.hpp"
#include "./is_part_of_struct.hpp"
#include "./spatial_struct.hpp"

/**************************************************************************************************/

namespace protox {
namespace rpr_fom {

/**************************************************************************************************/

using namespace protox;
using namespace protox::hla;

/**************************************************************************************************/

////// Attribute Table /////////////////////////////////////////////////////////
//     +--------------------------------------------------------+---------------------------------+------------------------------------+-----------------------------------------------+
//     | Name                                                   | Attribute                       | Datatype                           | String Name                                   |
//     +--------------------------------------------------------+---------------------------------+------------------------------------+-----------------------------------------------+
  struct HLAobjectRoot       {HLA_NAME( "HLAobjectRoot"       )};
                                                           struct HLAprivilegeToDeleteObject      : attr< hla_13::HLA13octet           > {HLA_NAME( "HLAprivilegeToDeleteObject" )};
//     +--------------------------------------------------------+---------------------------------+------------------------------------+-----------------------------------------------+
  struct BaseEntity          {HLA_NAME( "BaseEntity"          )};
                                                           struct EntityType                      : attr< EntityTypeStruct::type       > {HLA_NAME( "EntityType" )};
//     +                                                        +---------------------------------+------------------------------------+-----------------------------------------------+
                                                           struct EntityIdentifier                : attr< EntityIdentifierStruct::type > {HLA_NAME( "EntityIdentifier" )};
//     +                                                        +---------------------------------+------------------------------------+-----------------------------------------------+
                                                           struct IsPartOf                        : attr< IsPartOfStruct::type         > {HLA_NAME( "IsPartOf" )};
//     +                                                        +---------------------------------+------------------------------------+-----------------------------------------------+
                                                           struct Spatial                         : attr< SpatialStruct::type          > {HLA_NAME( "Spatial" )};
//     +                                                        +---------------------------------+------------------------------------+-----------------------------------------------+
                                                           struct RelativeSpatial                 : attr< SpatialStruct::type          > {HLA_NAME( "RelativeSpatial" )};
//     +--------------------------------------------------------+---------------------------------+------------------------------------+-----------------------------------------------+
  struct PhysicalEntity      {HLA_NAME( "PhysicalEntity"      )};
                                                           struct AcousticSignatureIndex          : attr< hla_13::HLA13short           > {HLA_NAME( "AcousticSignatureIndex" )};
//     +                                                        +---------------------------------+------------------------------------+-----------------------------------------------+
                                                           struct AlternateEntityType             : attr< EntityTypeStruct::type       > {HLA_NAME( "AlternateEntityType" )};
//     +                                                        +---------------------------------+------------------------------------+-----------------------------------------------+
                                                           struct ArticulatedParametersArray      : attr< hla_13::HLA13octet           > {HLA_NAME( "ArticulatedParametersArray" )};
//     +                                                        +---------------------------------+------------------------------------+-----------------------------------------------+
                                                           struct CamouflageType                  : attr< hla_13::HLA13octet           > {HLA_NAME( "CamouflageType" )};
//     +                                                        +---------------------------------+------------------------------------+-----------------------------------------------+
                                                           struct DamageState                     : attr< hla_13::HLA13octet           > {HLA_NAME( "DamageState" )};
//     +                                                        +---------------------------------+------------------------------------+-----------------------------------------------+
                                                           struct EngineSmokeOn                   : attr< hla_13::HLA13octet           > {HLA_NAME( "EngineSmokeOn" )};
//     +                                                        +---------------------------------+------------------------------------+-----------------------------------------------+
                                                           struct FirePowerDisabled               : attr< hla_13::HLA13octet           > {HLA_NAME( "FirePowerDisabled" )};
//     +                                                        +---------------------------------+------------------------------------+-----------------------------------------------+
                                                           struct FlamesPresent                   : attr< hla_13::HLA13octet           > {HLA_NAME( "FlamesPresent" )};
//     +                                                        +---------------------------------+------------------------------------+-----------------------------------------------+
                                                           struct ForceIdentifier                 : attr< hla_13::HLA13octet           > {HLA_NAME( "ForceIdentifier" )};
//     +                                                        +---------------------------------+------------------------------------+-----------------------------------------------+
                                                           struct HasAmmunitionSupplyCap          : attr< hla_13::HLA13octet           > {HLA_NAME( "HasAmmunitionSupplyCap" )};
//     +                                                        +---------------------------------+------------------------------------+-----------------------------------------------+
                                                           struct HasFuelSupplyCap                : attr< hla_13::HLA13octet           > {HLA_NAME( "HasFuelSupplyCap" )};
//     +                                                        +---------------------------------+------------------------------------+-----------------------------------------------+
                                                           struct HasRecoveryCap                  : attr< hla_13::HLA13octet           > {HLA_NAME( "HasRecoveryCap" )};
//     +                                                        +---------------------------------+------------------------------------+-----------------------------------------------+
                                                           struct HasRepairCap                    : attr< hla_13::HLA13octet           > {HLA_NAME( "HasRepairCap" )};
//     +                                                        +---------------------------------+------------------------------------+-----------------------------------------------+
                                                           struct Immobilized                     : attr< hla_13::HLA13octet           > {HLA_NAME( "Immobilized" )};
//     +                                                        +---------------------------------+------------------------------------+-----------------------------------------------+
                                                           struct InfraredSignatureIndex          : attr< hla_13::HLA13octet           > {HLA_NAME( "InfraredSignatureIndex" )};
//     +                                                        +---------------------------------+------------------------------------+-----------------------------------------------+
                                                           struct IsConcealed                     : attr< hla_13::HLA13octet           > {HLA_NAME( "IsConcealed" )};
//     +                                                        +---------------------------------+------------------------------------+-----------------------------------------------+
                                                           struct LiveEntityMeasuredSpeed         : attr< hla_13::HLA13octet           > {HLA_NAME( "LiveEntityMeasuredSpeed" )};
//     +                                                        +---------------------------------+------------------------------------+-----------------------------------------------+
                                                           struct Marking                         : attr< hla_13::HLA13octet           > {HLA_NAME( "Marking" )};
//     +                                                        +---------------------------------+------------------------------------+------------------------------------------------+
                                                           struct PowerPlantOn                    : attr< hla_13::HLA13octet           > {HLA_NAME( "PowerPlantOn" )};
//     +                                                        +---------------------------------+------------------------------------+------------------------------------------------+
                                                           struct PropulsionSystemsData           : attr< hla_13::HLA13octet           > {HLA_NAME( "PropulsionSystemsData" )};
//     +                                                        +---------------------------------+------------------------------------+------------------------------------------------+
                                                           struct RadarCrossSectionSignatureIndex : attr< hla_13::HLA13octet           > {HLA_NAME( "RadarCrossSectionSignatureIndex" )};
//     +                                                        +---------------------------------+------------------------------------+------------------------------------------------+
                                                           struct SmokePlumePresent               : attr< hla_13::HLA13octet           > {HLA_NAME( "SmokePlumePresent" )};
//     +                                                        +---------------------------------+------------------------------------+-----------------------------------------------+
                                                           struct TentDeployed                    : attr< hla_13::HLA13octet           > {HLA_NAME( "TentDeployed" )};
//     +                                                        +---------------------------------+------------------------------------+-----------------------------------------------+
                                                           struct TrailingEffectsCode             : attr< hla_13::HLA13octet           > {HLA_NAME( "TrailingEffectsCode" )};
//     +                                                        +---------------------------------+------------------------------------+-----------------------------------------------+
                                                           struct VectoringNozzleSystemData       : attr< hla_13::HLA13octet           > {HLA_NAME( "VectoringNozzleSystemData" )};
//     +--------------------------------------------------------+---------------------------------+------------------------------------+-----------------------------------------------+
  struct Platform            {HLA_NAME( "Platform" )};
                                                           struct AfterburnerOn                   : attr< hla_13::HLA13octet           > {HLA_NAME( "AfterburnerOn" )};
//     +                                                        +---------------------------------+------------------------------------+-----------------------------------------------+
                                                           struct AntiCollisionLightsOn           : attr< hla_13::HLA13octet           > {HLA_NAME( "AntiCollisionLightsOn" )};
//     +                                                        +---------------------------------+------------------------------------+-----------------------------------------------+
                                                           struct BlackOutBrakeLightsOn           : attr< hla_13::HLA13octet           > {HLA_NAME( "BlackOutBrakeLightsOn" )};
//     +                                                        +---------------------------------+------------------------------------+-----------------------------------------------+
                                                           struct BlackOutLightsOn                : attr< hla_13::HLA13octet           > {HLA_NAME( "BlackOutLightsOn" )};
//     +                                                        +---------------------------------+------------------------------------+-----------------------------------------------+
                                                           struct BrakeLightsOn                   : attr< hla_13::HLA13octet           > {HLA_NAME( "BrakeLightsOn" )};
//     +                                                        +---------------------------------+------------------------------------+-----------------------------------------------+
                                                           struct FormationLightsOn               : attr< hla_13::HLA13octet           > {HLA_NAME( "FormationLightsOn" )};
//     +                                                        +---------------------------------+------------------------------------+-----------------------------------------------+
                                                           struct HatchState                      : attr< hla_13::HLA13octet           > {HLA_NAME( "HatchState" )};
//     +                                                        +---------------------------------+------------------------------------+-----------------------------------------------+
                                                           struct HeadLightsOn                    : attr< hla_13::HLA13octet           > {HLA_NAME( "HeadLightsOn" )};
//     +                                                        +---------------------------------+------------------------------------+-----------------------------------------------+
                                                           struct InteriorLightsOn                : attr< hla_13::HLA13octet           > {HLA_NAME( "InteriorLightsOn" )};
//     +                                                        +---------------------------------+------------------------------------+-----------------------------------------------+
                                                           struct LandingLightsOn                 : attr< hla_13::HLA13octet           > {HLA_NAME( "LandingLightsOn" )};
//     +                                                        +---------------------------------+------------------------------------+-----------------------------------------------+
                                                           struct LauncherRaised                  : attr< hla_13::HLA13octet           > {HLA_NAME( "LauncherRaised" )};
//     +                                                        +---------------------------------+------------------------------------+-----------------------------------------------+
                                                           struct NavigationLightsOn              : attr< hla_13::HLA13octet           > {HLA_NAME( "NavigationLightsOn" )};
//     +                                                        +---------------------------------+------------------------------------+-----------------------------------------------+
                                                           struct RampDeployed                    : attr< hla_13::HLA13octet           > {HLA_NAME( "RampDeployed" )};
//     +                                                        +---------------------------------+------------------------------------+-----------------------------------------------+
                                                           struct RunningLightsOn                 : attr< hla_13::HLA13octet           > {HLA_NAME( "RunningLightsOn" )};
//     +                                                        +---------------------------------+------------------------------------+-----------------------------------------------+
                                                           struct SpotLightsOn                    : attr< hla_13::HLA13octet           > {HLA_NAME( "SpotLightsOn" )};
//     +                                                        +---------------------------------+------------------------------------+-----------------------------------------------+
                                                           struct TailLightsOn                    : attr< hla_13::HLA13octet           > {HLA_NAME( "TailLightsOn" )};
//     +--------------------------------------------------------+---------------------------------+------------------------------------+-----------------------------------------------+
  struct Lifeform            {HLA_NAME( "Lifeform" )};
                                                           struct FlashLightsOn                   : attr< hla_13::HLA13octet           > {HLA_NAME( "FlashLightsOn" )};
//     +                                                        +---------------------------------+------------------------------------+-----------------------------------------------+
                                                           struct StanceCode                      : attr< hla_13::HLA13octet           > {HLA_NAME( "StanceCode" )};
//     +                                                        +---------------------------------+------------------------------------+-----------------------------------------------+
                                                           struct PrimaryWeaponState              : attr< hla_13::HLA13octet           > {HLA_NAME( "PrimaryWeaponState" )};
//     +                                                        +---------------------------------+------------------------------------+-----------------------------------------------+
                                                           struct SecondaryWeaponState            : attr< hla_13::HLA13octet           > {HLA_NAME( "SecondaryWeaponState" )};
//     +                                                        +---------------------------------+------------------------------------+-----------------------------------------------+
                                                           struct ComplianceState                 : attr< hla_13::HLA13octet           > {HLA_NAME( "ComplianceState" )};
//     +--------------------------------------------------------+---------------------------------+------------------------------------+-----------------------------------------------+
  struct Human               {HLA_NAME( "Human" )};
//     +--------------------------------------------------------+---------------------------------+------------------------------------+-----------------------------------------------+
  struct NonHuman            {HLA_NAME( "NonHuman" )};
//     +--------------------------------------------------------+---------------------------------+------------------------------------+-----------------------------------------------+
  struct CulturalFeature     {HLA_NAME( "CulturalFeature" )};
                                                           struct ExternalLightsOn           : attr< hla_13::HLA13octet                > {HLA_NAME( "ExternalLightsOn" )};
//     +                                                        +---------------------------------+------------------------------------+-----------------------------------------------+
                                                           struct InternalHeatSourceOn       : attr< hla_13::HLA13octet                > {HLA_NAME( "InternalHeatSourceOn" )};
//     +                                                        +---------------------------------+------------------------------------+-----------------------------------------------+
                                                           struct InternalLightsOn           : attr< hla_13::HLA13octet                > {HLA_NAME( "InternalLightsOn" )};
//     +--------------------------------------------------------+---------------------------------+------------------------------------+-----------------------------------------------+
  struct Expendables         {HLA_NAME( "Expendables" )};
//     +--------------------------------------------------------+---------------------------------+------------------------------------+-----------------------------------------------+
  struct Munition            {HLA_NAME( "Munition" )};
                                                           struct LauncherFlashPresent : attr< hla_13::HLA13octet                      > {HLA_NAME( "LauncherFlashPresent" )};
//     +--------------------------------------------------------+---------------------------------+------------------------------------+-----------------------------------------------+
  struct Radio               {HLA_NAME( "Radio" )};
//     +--------------------------------------------------------+---------------------------------+------------------------------------+-----------------------------------------------+
  struct Sensor              {HLA_NAME( "Sensor" )
                                                           struct InteriorLightsOn                : attr< hla_13::HLA13octet           > {HLA_NAME( "InteriorLightsOn" )}; };
//     +                                                        +---------------------------------+------------------------------------+-----------------------------------------------+
                                                           struct AntennaRaised                   : attr< hla_13::HLA13octet           > {HLA_NAME( "AntennaRaised" )};
//     +                                                        +---------------------------------+------------------------------------+-----------------------------------------------+
                                                           struct BlackoutLightsOn                : attr< hla_13::HLA13octet           > {HLA_NAME( "BlackoutLightsOn" )};
//     +                                                        +---------------------------------+------------------------------------+-----------------------------------------------+
                                                           struct LightsOn                        : attr< hla_13::HLA13octet           > {HLA_NAME( "LightsOn" )};
//     +                                                        +---------------------------------+------------------------------------+-----------------------------------------------+
                                                           struct MissionKill                     : attr< hla_13::HLA13octet           > {HLA_NAME( "MissionKill" )};
//     +--------------------------------------------------------+---------------------------------+------------------------------------+-----------------------------------------------+
  struct Supplies            {HLA_NAME( "Supplies" )};
//     +--------------------------------------------------------+---------------------------------+------------------------------------+-----------------------------------------------+
  struct Aircraft            {HLA_NAME( "Aircraft" )};
//     +--------------------------------------------------------+---------------------------------+------------------------------------+-----------------------------------------------+
  struct AmphibiousVehicle   {HLA_NAME( "AmphibiousVehicle" )};
//     +--------------------------------------------------------+---------------------------------+------------------------------------+-----------------------------------------------+
  struct GroundVehicle       {HLA_NAME( "GroundVehicle" )};
//     +--------------------------------------------------------+---------------------------------+------------------------------------+-----------------------------------------------+
  struct MultiDomainPlatform {HLA_NAME( "MultiDomainPlatform" )};
//     +--------------------------------------------------------+---------------------------------+------------------------------------+-----------------------------------------------+
  struct Spacecraft          {HLA_NAME( "Spacecraft" )};
//     +--------------------------------------------------------+---------------------------------+------------------------------------+-----------------------------------------------+
  struct SubmersibleVessel   {HLA_NAME( "SubmersibleVessel" )};
//     +--------------------------------------------------------+---------------------------------+------------------------------------+-----------------------------------------------+
  struct SurfaceVessel       {HLA_NAME( "SurfaceVessel" )};
//     +--------------------------------------------------------+---------------------------------+------------------------------------+-----------------------------------------------+
  struct AggregateEntity     {HLA_NAME( "AggregateEntity" )
                                                           struct ForceIdentifier                 : attr< hla_13::HLA13octet           > {HLA_NAME( "ForceIdentifier" )}; };
//     +                                                        +---------------------------------+------------------------------------+-----------------------------------------------+
                                                           struct AggregateMarking                : attr< hla_13::HLA13octet           > {HLA_NAME( "AggregateMarking" )};
//     +                                                        +---------------------------------+------------------------------------+-----------------------------------------------+
                                                           struct AggregateState                  : attr< hla_13::HLA13octet           > {HLA_NAME( "AggregateState" )};
//     +                                                        +---------------------------------+------------------------------------+-----------------------------------------------+
                                                           struct Dimensions                      : attr< hla_13::HLA13octet           > {HLA_NAME( "Dimensions" )};
//     +                                                        +---------------------------------+------------------------------------+-----------------------------------------------+
                                                           struct EntityIdentifiers               : attr< hla_13::HLA13octet           > {HLA_NAME( "EntityIdentifiers" )};
//     +                                                        +---------------------------------+------------------------------------+-----------------------------------------------+
                                                           struct Formation                       : attr< hla_13::HLA13octet           > {HLA_NAME( "Formation" )};
//     +                                                        +---------------------------------+------------------------------------+-----------------------------------------------+
                                                           struct NumberOfSilentEntities          : attr< hla_13::HLA13octet           > {HLA_NAME( "NumberOfSilentEntities" )};
//     +                                                        +---------------------------------+------------------------------------+-----------------------------------------------+
                                                           struct NumberOfVariableDatums          : attr< hla_13::HLA13octet           > {HLA_NAME( "NumberOfVariableDatums" )};
//     +                                                        +---------------------------------+------------------------------------+-----------------------------------------------+
                                                           struct SilentAggregates                : attr< hla_13::HLA13octet           > {HLA_NAME( "SilentAggregates" )};
//     +                                                        +---------------------------------+------------------------------------+-----------------------------------------------+
                                                           struct SilentEntities                  : attr< hla_13::HLA13octet           > {HLA_NAME( "SilentEntities" )};
//     +                                                        +---------------------------------+------------------------------------+-----------------------------------------------+
                                                           struct SubAggregateIdentifiers         : attr< hla_13::HLA13octet           > {HLA_NAME( "SubAggregateIdentifiers" )};
//     +                                                        +---------------------------------+------------------------------------+-----------------------------------------------+
                                                           struct VariableDatums                  : attr< hla_13::HLA13octet           > {HLA_NAME( "VariableDatums" )};
//     +--------------------------------------------------------+---------------------------------+------------------------------------+-----------------------------------------------+
  struct EnvironmentalEntity {HLA_NAME( "EnvironmentalEntity" )};
                                                           struct OpacityCode                     : attr< hla_13::HLA13octet           > {HLA_NAME( "OpacityCode" )};
//     +--------------------------------------------------------+---------------------------------+------------------------------------+-----------------------------------------------+
}}

/**************************************************************************************************/

#endif

/**************************************************************************************************/
